import { app, BrowserWindow } from "electron";
import path from "node:path";
import "./main/index";
import { showLoading } from "./main/loadWindow";
let loadingWindow: BrowserWindow | null;

process.env.APP_ROOT = path.join(__dirname, "..");
// 🚧 Use ['ENV_NAME'] avoid vite:define plugin - Vite@2.x
export const VITE_DEV_SERVER_URL = process.env["VITE_DEV_SERVER_URL"];
export const MAIN_DIST = path.join(process.env.APP_ROOT, "dist-electron");
export const RENDERER_DIST = path.join(process.env.APP_ROOT, "dist");

process.env.VITE_PUBLIC = VITE_DEV_SERVER_URL
  ? path.join(process.env.APP_ROOT, "public")
  : RENDERER_DIST;

let win: BrowserWindow | null;

/**
 * 创建登录窗口
 */
function createLoginWindow() {
  win = new BrowserWindow({
    icon: path.join(process.env.VITE_PUBLIC, "electron-vite.svg"),
    webPreferences: {
      preload: path.join(__dirname, "preload.js"),
    },
    show: false,
    height: 400,
    width: 600,
    frame: false, //无边框
    resizable: false, //不可缩放
  });

  // Test active push message to Renderer-process.
  win.webContents.on("did-finish-load", () => {
    win?.webContents.send("main-process-message", new Date().toLocaleString());
  });

  setTimeout(() => {
    if (VITE_DEV_SERVER_URL) {
      win?.loadURL(VITE_DEV_SERVER_URL);
    } else {
      win?.loadFile(path.join(RENDERER_DIST, "index.html"));
    }
  }, 2001);
  win.once("ready-to-show", () => {
    loadingWindow?.hide();
    loadingWindow?.close();
    win?.show();
    // 打开开发者工具
    win?.webContents.openDevTools();
  });
}
// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
app.on("window-all-closed", () => {
  if (process.platform !== "darwin") {
    app.quit();
    win = null;
  }
});

app.on("activate", () => {
  // On OS X it's common to re-create a window in the app when the
  // dock icon is clicked and there are no other windows open.
  if (BrowserWindow.getAllWindows().length === 0) {
    createLoginWindow();
  }
});

app.on("ready", () => {
  // 设置合适的形状,使loading窗口更加美观
  loadingWindow = new BrowserWindow({
    show: false,
    frame: false, //无边框
    resizable: false,
    transparent: true, //窗口透明，
    height: 360,
    width: 360,
  });
  showLoading(loadingWindow, createLoginWindow);
});
